﻿using System;
using Microsoft.VisualBasic;

namespace WirelessAccessPoint.DataAnnotations
{
    /// <summary>
    /// UIへの入力文字を変換する必要があることを表す属性です。
    /// InputXXXBehaviorによってこの属性が処理されます。
    /// </summary>
    [AttributeUsage(AttributeTargets.Property)]
    public class InputConverterAttribute : Attribute
    {
        private VbStrConv conversionMode = VbStrConv.None;

        /// <summary>
        /// このクラスの新しいインスタンスを初期化します。
        /// </summary>
        public InputConverterAttribute()
        {
        }

        /// <summary>
        /// このクラスの新しいインスタンスを初期化します。
        /// </summary>
        /// <param name="conversionMode">
        /// 入力文字を変換する種類。
        /// </param>
        public InputConverterAttribute(VbStrConv conversionMode)
        {
            this.conversionMode = conversionMode;
        }

        /// <summary>
        /// 入力文字を変換する種類を設定または取得します。
        /// </summary>
        public VbStrConv ConversionMode
        {
            get { return this.conversionMode; }
            set { this.conversionMode = value; }
        }

        /// <summary>
        /// 入力文字を変換します。
        /// </summary>
        /// <param name="value">
        /// 入力文字。
        /// </param>
        /// <returns>
        /// 変換された入力文字。
        /// </returns>
        public string Convert(string value)
        {
            // 変換する種類がOSによってサポートされていないと
            // エラーになるのでTRY-CATCHでエラーを無視する
            try
            {
                return Strings.StrConv(value, this.conversionMode);
            }
            catch
            {
                return value;
            }
        }
    }
}
